package com.epin.base.enums.basicdata;


/**
 * <p>支票状态：0未使用，1已使用，2作废，3抵押</p>
 * 
 * @author fujiajun
 * @since 2017-08-18
 *
 */
public enum ChequeEnum {

	/**
	 * 未定义
	 */
	 UNDEFINED(-1),	
	/**
	 * 0未使用
	 */
	NOT_USED(0), 
	/**
	 * 1已使用
	 */
	USED(1),
	/**
	 * 2作废
	 */
	CANCEL(2),
	/**
	 * 3抵押
	 */
	MORTGAGE(3);
	
	private int value;
	
	private ChequeEnum(int value) {
		this.value = value;
	}
	
	public int val() {
		return value;
	}
	
	/**
	 * <p>将数字形态的“状态”转为枚举形态</p>
	 * 
	 * 
	 * @param status 状态（数字形态）
	 * 
	 * @return ChequeStatus
	 * 
	 * @author fujaijun
	 * @since 2017-08-18
	 */
	public static ChequeEnum getStatus(int status) {
		
		for (ChequeEnum e : ChequeEnum.values()) {
			if (e.value == status) {
				return e;
			}
		}
		
		return UNDEFINED;
	}
	
	
	/**
	 * <p>判断是当前操作否为作废操作</p>
	 * 
	 * @param oldStatus 旧状态
	 * @param newStatus 新状态
	 * 
	 * @return boolean
	 * 
	 * @author fujaijun
	 * @since 2017-08-18
	 */
	public static boolean isCancelOp(ChequeEnum oldStatus, ChequeEnum newStatus) {
		return (oldStatus == ChequeEnum.NOT_USED && newStatus == ChequeEnum.CANCEL) ? true : false;
	}
	
	
	/**
	 * <p>判断是当前操作否为取消作废操作</p>
	 * 
	 * @param oldStatus 旧状态
	 * @param newStatus 新状态
	 * 
	 * @return boolean
	 * 
	 * @author fujaijun
	 * @since 2017-08-18
	 */
	public static boolean isStartOp(ChequeEnum oldStatus, ChequeEnum newStatus) {
		return (oldStatus == ChequeEnum.CANCEL && newStatus == ChequeEnum.NOT_USED) ? true : false;
	}
	
	
	/**
	 * <p>判断是当前操作否为使用操作</p>
	 * 
	 * @param oldStatus 旧状态
	 * @param newStatus 新状态
	 * 
	 * @return boolean
	 * 
	 * @author fujaijun
	 * @since 2017-08-18
	 */
	public static boolean isUseOp(ChequeEnum oldStatus, ChequeEnum newStatus) {
		return (oldStatus == ChequeEnum.NOT_USED && newStatus == ChequeEnum.USED) ? true : false;
	}
	
	
	/**
	 * <p>判断是当前操作否为抵押操作</p>
	 * 
	 * @param oldStatus 旧状态
	 * @param newStatus 新状态
	 * 
	 * @return boolean
	 * 
	 * @author fujaijun
	 * @since 2017-08-18
	 */
	public static boolean isMortgageOp(ChequeEnum oldStatus, ChequeEnum newStatus) {
		return (oldStatus == ChequeEnum.NOT_USED && newStatus == ChequeEnum.MORTGAGE) ? true : false;
	}
	
	
	/**
	 * <p>判断是当前操作否为作废或取消作废操作</p>
	 * 
	 * @param oldStatus 旧状态
	 * @param newStatus 新状态
	 * 
	 * @return boolean
	 * 
	 * @author fujaijun
	 * @since 2017-08-18
	 */
	public static boolean isCancelOrStartOp(ChequeEnum oldStatus, ChequeEnum newStatus) {
		return (isCancelOp(oldStatus, newStatus) || isStartOp(oldStatus, newStatus)) ? true : false;
	}
	
	
	/**
	 * <p>判断是当前操作否为使用或抵押操作</p>
	 * 
	 * @param oldStatus 旧状态
	 * @param newStatus 新状态
	 * 
	 * @return boolean
	 * 
	 * @author fujaijun
	 * @since 2017-08-18
	 */
	public static boolean isUseOrMortgageOp(ChequeEnum oldStatus, ChequeEnum newStatus) {
		return (isUseOp(oldStatus, newStatus) || isMortgageOp(oldStatus, newStatus)) ? true : false;
	}
}
